5.3 持续集成实现

学习目标:

  1. 掌握持续集成流程
  2. 掌握脚本编写方法

5.3.1 目录环境

  • git仓库路径:

    /usr/git_repos/hello_web.git git server搭建方法

  • 在git服务器上创建目录结构

    └── web_project
      ├── hello_web
      └── script
    

5.3.2 手动执行获取代码和编译

  1. 下载master分支最新代码

    git@ubuntu:~/web_project/hello_web$ pwd
    /home/git/web_project/hello_web
    # 下载代码
    git@ubuntu:~/web_project/hello_web$ git archive --remote=/usr/git_repos/hello_web.git --format=tar -o project.tar master
    git@ubuntu:~/web_project/hello_web$ ls
    project.tar
    # 解压代码
    git@ubuntu:~/web_project/hello_web$tar xf project.tar
    
  2. 编译

    git@ubuntu:~/web_project/hello_web$ export GOPATH=/home/git/web_project/hello_web/
    git@ubuntu:~/web_project/hello_web$ /usr/local/go/bin/go install main
    git@ubuntu:~/web_project/hello_web$ ls bin
    main
    

5.3.3 脚本实现编译

编写脚本的步骤

  1. 确定框架 将步骤定义为函数
  2. 命令填充 拷贝命令到函数内
  3. 功能扩充
    • 变量替换
    • 功能参数化
    • 返回值处理
#!/bin/bash

LAST_COMMIT="$2"

get_prefix() {
    TIMESTAMP=`date +%Y%m%d%H%M%S`
    SHORT_COMMIT="${LAST_COMMIT:0:4}XXX${LAST_COMMIT:0-2:2}"
    echo "${SHORT_COMMIT}_${TIMESTAMP}"
}
export GOPATH="/home/git/web_project/`get_prefix`_hello_web"
build_prj() {
    /usr/local/go/bin/go install main
}

get_code() {
    mkdir "${GOPATH}"
    cd "${GOPATH}/"
    git archive  --remote /usr/git_repos/hello_web.git --format=tar -o project.tar master && tar xf project.tar
}

build() {
    get_code && build_prj
}

info_msg() {
    echo "Usage:$0 {build}"
}

main() {
    case "$1" in
        "build")
        build
        ;;
        *)
        info_msg
        ;;
    esac
    return $?
}
main $1
exit $?

5.3.4 钩子脚本post_receive编写

#!/bin/bash
read stdin
LAST_COMMIT=`echo "${stdin}" | awk '{print $1}'`
bash /home/git/web_project/script/build_deploy.sh build "${LAST_COMMIT}"